package 剑指offer;

/**
 * 
 * @author 兰伟朋
 *@time 2020年12月14日下午9:05:43
 *@see 请实现一个函数，把字符串 s 中的每个空格替换成"%20"。

 
 *
 */
public class _05替换空格 {
	public static void main(String[] args) {
		String s="We are happy";
		s=replaceSpace3(s);
		System.out.println(s);
	}
	/**
	 * 
	 *@time 2020年12月14日下午9:14:29
	 * 
	 *@param s
	 *@return String
	 *
	 *@see 这是直接的自己弄的感觉不科学
	 */
	public static String replaceSpace1(String s) {
		return s.replaceAll(" ", "%20");		
    }
	/**
	 * 
	 *@time 2020年12月14日下午9:17:56
	 * 
	 *@param s
	 *@return String
	 *
	 *@see 使用StringBuilder来实现
	 */
	public static String replaceSpace2(String s) {
		 char []str=s.toCharArray();
		 StringBuilder builder=new StringBuilder();
		 for (char c:str) {
			if(c==' ') builder.append("%20");
			else builder.append(c);
		}
		 return builder.toString();
	}
	/**
	 * 
	 *@time 2020年12月14日下午9:19:52
	 * 
	 *@param s
	 *@return String
	 *
	 *@see第一种方法速度快，但是会浪费空间
	 *第二种方法不会浪费空间，但是会有些许的性能损耗
	 */
	public static String replaceSpace3(String s) {
		int n=s.length();
		char c[]=new char[3*n];
		int j=0;
		for(int i=0;i<s.length();i++) {
			char t=s.charAt(i);
			if(t==' ') {
				c[j++]='%';
				c[j++]='2';
				c[j++]='0';
			}else c[j++]=t;
		}
		return new String(c);	
	}
	public static String replaceSpace31(String s) {
		int kg=0;
		for(char c:s.toCharArray()) {
			if(c==' ') kg++;
		}
		char cha[]=new char[s.length()+2*kg];
		int j=0;
		for(int i=0;i<s.length();i++) {
			char t=s.charAt(i);
			if(t==' ') {
				cha[j++]='%';
				cha[j++]='2';
				cha[j++]='0';
			}else cha[j++]=t;
		}
		return new String(cha);
		
	}
}
